/**
 * 
 */
package br.srv.full.postalservices.faces.components;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.el.ValueExpression;
import javax.faces.component.EditableValueHolder;
import javax.faces.component.NamingContainer;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;

/**
 * @author Carlos Delfino
 * 
 */
public class LocaleUIComponent extends UIInput implements EditableValueHolder, NamingContainer {

	/**
	 * 
	 */
	private static final String COMPONENT_RENDERER = "HTMLLocaleRenderer";

	/**
	 * <p>
	 * The standard component type for this component.
	 * </p>
	 */
	public static final String COMPONENT_TYPE = "LocaleUIComponent";

	/**
	 * <p>
	 * The standard component family for this component.
	 * </p>
	 */
	public static final String COMPONENT_FAMILY = "br.srv.full.postalservices";

	/*
	 * (non-Javadoc)
	 * 
	 * @see javax.faces.component.UIComponent#getFamily()
	 */
	@Override
	public String getFamily() {
		return COMPONENT_FAMILY;
	}

	private static final String[] OPTIMIZED_PACKAGES = { "br.srv.full.postalservices.faces.components" };

	public LocaleUIComponent() {
		super();
		setRendererType(COMPONENT_RENDERER);
	}

	private java.lang.String accesskey;

	/**
	 * <p>
	 * Return the value of the <code>accesskey</code> property.
	 * </p>
	 * <p>
	 * Contents: Access key that, when pressed, transfers focus to this element.
	 */
	public java.lang.String getAccesskey() {
		if (null != this.accesskey) {
			return this.accesskey;
		}
		ValueExpression _ve = getValueExpression("accesskey");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>accesskey</code> property.
	 * </p>
	 */
	public void setAccesskey(java.lang.String accesskey) {
		this.accesskey = accesskey;
		handleAttribute("accesskey", accesskey);
	}

	private java.lang.String alt;

	/**
	 * <p>
	 * Return the value of the <code>alt</code> property.
	 * </p>
	 * <p>
	 * Contents: Alternate textual description of the element rendered by this
	 * component.
	 */
	public java.lang.String getAlt() {
		if (null != this.alt) {
			return this.alt;
		}
		ValueExpression _ve = getValueExpression("alt");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>alt</code> property.
	 * </p>
	 */
	public void setAlt(java.lang.String alt) {
		this.alt = alt;
		handleAttribute("alt", alt);
	}

	private java.lang.String autocomplete;

	/**
	 * <p>
	 * Return the value of the <code>autocomplete</code> property.
	 * </p>
	 * <p>
	 * Contents: If the value of this attribute is "off", render "off" as the
	 * value of the attribute. This indicates that the browser should disable
	 * its autocomplete feature for this component. This is useful for
	 * components that perform autocompletion and do not want the browser
	 * interfering. If this attribute is not set or the value is "on", render
	 * nothing.
	 */
	public java.lang.String getAutocomplete() {
		if (null != this.autocomplete) {
			return this.autocomplete;
		}
		ValueExpression _ve = getValueExpression("autocomplete");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>autocomplete</code> property.
	 * </p>
	 */
	public void setAutocomplete(java.lang.String autocomplete) {
		this.autocomplete = autocomplete;
	}

	private java.lang.String dir;

	/**
	 * <p>
	 * Return the value of the <code>dir</code> property.
	 * </p>
	 * <p>
	 * Contents: Direction indication for text that does not inherit
	 * directionality. Valid values are "LTR" (left-to-right) and "RTL"
	 * (right-to-left).
	 */
	public java.lang.String getDir() {
		if (null != this.dir) {
			return this.dir;
		}
		ValueExpression _ve = getValueExpression("dir");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>dir</code> property.
	 * </p>
	 */
	public void setDir(java.lang.String dir) {
		this.dir = dir;
		handleAttribute("dir", dir);
	}

	private java.lang.Boolean disabled;

	/**
	 * <p>
	 * Return the value of the <code>disabled</code> property.
	 * </p>
	 * <p>
	 * Contents: Flag indicating that this element must never receive focus or
	 * be included in a subsequent submit. A value of false causes no attribute
	 * to be rendered, while a value of true causes the attribute to be rendered
	 * as disabled="disabled".
	 */
	public boolean isDisabled() {
		if (null != this.disabled) {
			return this.disabled;
		}
		ValueExpression _ve = getValueExpression("disabled");
		if (_ve != null) {
			return (java.lang.Boolean) _ve.getValue(getFacesContext().getELContext());
		} else {
			return false;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>disabled</code> property.
	 * </p>
	 */
	public void setDisabled(boolean disabled) {
		this.disabled = disabled;
	}

	private java.lang.String label;

	/**
	 * <p>
	 * Return the value of the <code>label</code> property.
	 * </p>
	 * <p>
	 * Contents: A localized user presentable name for this component.
	 */
	public java.lang.String getLabel() {
		if (null != this.label) {
			return this.label;
		}
		ValueExpression _ve = getValueExpression("label");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>label</code> property.
	 * </p>
	 */
	public void setLabel(java.lang.String label) {
		this.label = label;
	}

	private java.lang.String lang;

	/**
	 * <p>
	 * Return the value of the <code>lang</code> property.
	 * </p>
	 * <p>
	 * Contents: Code describing the language used in the generated markup for
	 * this component.
	 */
	public java.lang.String getLang() {
		if (null != this.lang) {
			return this.lang;
		}
		ValueExpression _ve = getValueExpression("lang");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>lang</code> property.
	 * </p>
	 */
	public void setLang(java.lang.String lang) {
		this.lang = lang;
		handleAttribute("lang", lang);
	}

	private java.lang.Integer maxlength;

	/**
	 * <p>
	 * Return the value of the <code>maxlength</code> property.
	 * </p>
	 * <p>
	 * Contents: The maximum number of characters that may be entered in this
	 * field.
	 */
	public int getMaxlength() {
		if (null != this.maxlength) {
			return this.maxlength;
		}
		ValueExpression _ve = getValueExpression("maxlength");
		if (_ve != null) {
			return (java.lang.Integer) _ve.getValue(getFacesContext().getELContext());
		} else {
			return Integer.MIN_VALUE;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>maxlength</code> property.
	 * </p>
	 */
	public void setMaxlength(int maxlength) {
		this.maxlength = maxlength;
		handleAttribute("maxlength", maxlength);
	}

	private java.lang.String onblur;

	/**
	 * <p>
	 * Return the value of the <code>onblur</code> property.
	 * </p>
	 * <p>
	 * Contents: Javascript code executed when this element loses focus.
	 */
	public java.lang.String getOnblur() {
		if (null != this.onblur) {
			return this.onblur;
		}
		ValueExpression _ve = getValueExpression("onblur");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>onblur</code> property.
	 * </p>
	 */
	public void setOnblur(java.lang.String onblur) {
		this.onblur = onblur;
		handleAttribute("onblur", onblur);
	}

	private java.lang.String onchange;

	/**
	 * <p>
	 * Return the value of the <code>onchange</code> property.
	 * </p>
	 * <p>
	 * Contents: Javascript code executed when this element loses focus and its
	 * value has been modified since gaining focus.
	 */
	public java.lang.String getOnchange() {
		if (null != this.onchange) {
			return this.onchange;
		}
		ValueExpression _ve = getValueExpression("onchange");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>onchange</code> property.
	 * </p>
	 */
	public void setOnchange(java.lang.String onchange) {
		this.onchange = onchange;
		handleAttribute("onchange", onchange);
	}

	private java.lang.String onclick;

	/**
	 * <p>
	 * Return the value of the <code>onclick</code> property.
	 * </p>
	 * <p>
	 * Contents: Javascript code executed when a pointer button is clicked over
	 * this element.
	 */
	public java.lang.String getOnclick() {
		if (null != this.onclick) {
			return this.onclick;
		}
		ValueExpression _ve = getValueExpression("onclick");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>onclick</code> property.
	 * </p>
	 */
	public void setOnclick(java.lang.String onclick) {
		this.onclick = onclick;
		handleAttribute("onclick", onclick);
	}

	private java.lang.String ondblclick;

	/**
	 * <p>
	 * Return the value of the <code>ondblclick</code> property.
	 * </p>
	 * <p>
	 * Contents: Javascript code executed when a pointer button is double
	 * clicked over this element.
	 */
	public java.lang.String getOndblclick() {
		if (null != this.ondblclick) {
			return this.ondblclick;
		}
		ValueExpression _ve = getValueExpression("ondblclick");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>ondblclick</code> property.
	 * </p>
	 */
	public void setOndblclick(java.lang.String ondblclick) {
		this.ondblclick = ondblclick;
		handleAttribute("ondblclick", ondblclick);
	}

	private java.lang.String onfocus;

	/**
	 * <p>
	 * Return the value of the <code>onfocus</code> property.
	 * </p>
	 * <p>
	 * Contents: Javascript code executed when this element receives focus.
	 */
	public java.lang.String getOnfocus() {
		if (null != this.onfocus) {
			return this.onfocus;
		}
		ValueExpression _ve = getValueExpression("onfocus");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>onfocus</code> property.
	 * </p>
	 */
	public void setOnfocus(java.lang.String onfocus) {
		this.onfocus = onfocus;
		handleAttribute("onfocus", onfocus);
	}

	private java.lang.String onkeydown;

	/**
	 * <p>
	 * Return the value of the <code>onkeydown</code> property.
	 * </p>
	 * <p>
	 * Contents: Javascript code executed when a key is pressed down over this
	 * element.
	 */
	public java.lang.String getOnkeydown() {
		if (null != this.onkeydown) {
			return this.onkeydown;
		}
		ValueExpression _ve = getValueExpression("onkeydown");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>onkeydown</code> property.
	 * </p>
	 */
	public void setOnkeydown(java.lang.String onkeydown) {
		this.onkeydown = onkeydown;
		handleAttribute("onkeydown", onkeydown);
	}

	private java.lang.String onkeypress;

	/**
	 * <p>
	 * Return the value of the <code>onkeypress</code> property.
	 * </p>
	 * <p>
	 * Contents: Javascript code executed when a key is pressed and released
	 * over this element.
	 */
	public java.lang.String getOnkeypress() {
		if (null != this.onkeypress) {
			return this.onkeypress;
		}
		ValueExpression _ve = getValueExpression("onkeypress");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>onkeypress</code> property.
	 * </p>
	 */
	public void setOnkeypress(java.lang.String onkeypress) {
		this.onkeypress = onkeypress;
		handleAttribute("onkeypress", onkeypress);
	}

	private java.lang.String onkeyup;

	/**
	 * <p>
	 * Return the value of the <code>onkeyup</code> property.
	 * </p>
	 * <p>
	 * Contents: Javascript code executed when a key is released over this
	 * element.
	 */
	public java.lang.String getOnkeyup() {
		if (null != this.onkeyup) {
			return this.onkeyup;
		}
		ValueExpression _ve = getValueExpression("onkeyup");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>onkeyup</code> property.
	 * </p>
	 */
	public void setOnkeyup(java.lang.String onkeyup) {
		this.onkeyup = onkeyup;
		handleAttribute("onkeyup", onkeyup);
	}

	private java.lang.String onmousedown;

	/**
	 * <p>
	 * Return the value of the <code>onmousedown</code> property.
	 * </p>
	 * <p>
	 * Contents: Javascript code executed when a pointer button is pressed down
	 * over this element.
	 */
	public java.lang.String getOnmousedown() {
		if (null != this.onmousedown) {
			return this.onmousedown;
		}
		ValueExpression _ve = getValueExpression("onmousedown");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>onmousedown</code> property.
	 * </p>
	 */
	public void setOnmousedown(java.lang.String onmousedown) {
		this.onmousedown = onmousedown;
		handleAttribute("onmousedown", onmousedown);
	}

	private java.lang.String onmousemove;

	/**
	 * <p>
	 * Return the value of the <code>onmousemove</code> property.
	 * </p>
	 * <p>
	 * Contents: Javascript code executed when a pointer button is moved within
	 * this element.
	 */
	public java.lang.String getOnmousemove() {
		if (null != this.onmousemove) {
			return this.onmousemove;
		}
		ValueExpression _ve = getValueExpression("onmousemove");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>onmousemove</code> property.
	 * </p>
	 */
	public void setOnmousemove(java.lang.String onmousemove) {
		this.onmousemove = onmousemove;
		handleAttribute("onmousemove", onmousemove);
	}

	private java.lang.String onmouseout;

	/**
	 * <p>
	 * Return the value of the <code>onmouseout</code> property.
	 * </p>
	 * <p>
	 * Contents: Javascript code executed when a pointer button is moved away
	 * from this element.
	 */
	public java.lang.String getOnmouseout() {
		if (null != this.onmouseout) {
			return this.onmouseout;
		}
		ValueExpression _ve = getValueExpression("onmouseout");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>onmouseout</code> property.
	 * </p>
	 */
	public void setOnmouseout(java.lang.String onmouseout) {
		this.onmouseout = onmouseout;
		handleAttribute("onmouseout", onmouseout);
	}

	private java.lang.String onmouseover;

	/**
	 * <p>
	 * Return the value of the <code>onmouseover</code> property.
	 * </p>
	 * <p>
	 * Contents: Javascript code executed when a pointer button is moved onto
	 * this element.
	 */
	public java.lang.String getOnmouseover() {
		if (null != this.onmouseover) {
			return this.onmouseover;
		}
		ValueExpression _ve = getValueExpression("onmouseover");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>onmouseover</code> property.
	 * </p>
	 */
	public void setOnmouseover(java.lang.String onmouseover) {
		this.onmouseover = onmouseover;
		handleAttribute("onmouseover", onmouseover);
	}

	private java.lang.String onmouseup;

	/**
	 * <p>
	 * Return the value of the <code>onmouseup</code> property.
	 * </p>
	 * <p>
	 * Contents: Javascript code executed when a pointer button is released over
	 * this element.
	 */
	public java.lang.String getOnmouseup() {
		if (null != this.onmouseup) {
			return this.onmouseup;
		}
		ValueExpression _ve = getValueExpression("onmouseup");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>onmouseup</code> property.
	 * </p>
	 */
	public void setOnmouseup(java.lang.String onmouseup) {
		this.onmouseup = onmouseup;
		handleAttribute("onmouseup", onmouseup);
	}

	private java.lang.String onselect;

	/**
	 * <p>
	 * Return the value of the <code>onselect</code> property.
	 * </p>
	 * <p>
	 * Contents: Javascript code executed when text within this element is
	 * selected by the user.
	 */
	public java.lang.String getOnselect() {
		if (null != this.onselect) {
			return this.onselect;
		}
		ValueExpression _ve = getValueExpression("onselect");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>onselect</code> property.
	 * </p>
	 */
	public void setOnselect(java.lang.String onselect) {
		this.onselect = onselect;
		handleAttribute("onselect", onselect);
	}

	private java.lang.Boolean readonly;

	/**
	 * <p>
	 * Return the value of the <code>readonly</code> property.
	 * </p>
	 * <p>
	 * Contents: Flag indicating that this component will prohibit changes by
	 * the user. The element may receive focus unless it has also been disabled.
	 * A value of false causes no attribute to be rendered, while a value of
	 * true causes the attribute to be rendered as readonly="readonly".
	 */
	public boolean isReadonly() {
		if (null != this.readonly) {
			return this.readonly;
		}
		ValueExpression _ve = getValueExpression("readonly");
		if (_ve != null) {
			return (java.lang.Boolean) _ve.getValue(getFacesContext().getELContext());
		} else {
			return false;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>readonly</code> property.
	 * </p>
	 */
	public void setReadonly(boolean readonly) {
		this.readonly = readonly;
	}

	private java.lang.Integer size;

	/**
	 * <p>
	 * Return the value of the <code>size</code> property.
	 * </p>
	 * <p>
	 * Contents: The number of characters used to determine the width of this
	 * field.
	 */
	public int getSize() {
		if (null != this.size) {
			return this.size;
		}
		ValueExpression _ve = getValueExpression("size");
		if (_ve != null) {
			return (java.lang.Integer) _ve.getValue(getFacesContext().getELContext());
		} else {
			return Integer.MIN_VALUE;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>size</code> property.
	 * </p>
	 */
	public void setSize(int size) {
		this.size = size;
		handleAttribute("size", size);
	}

	private java.lang.String style;

	/**
	 * <p>
	 * Return the value of the <code>style</code> property.
	 * </p>
	 * <p>
	 * Contents: CSS style(s) to be applied when this component is rendered.
	 */
	public java.lang.String getStyle() {
		if (null != this.style) {
			return this.style;
		}
		ValueExpression _ve = getValueExpression("style");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>style</code> property.
	 * </p>
	 */
	public void setStyle(java.lang.String style) {
		this.style = style;
		handleAttribute("style", style);
	}

	private java.lang.String styleClass;

	/**
	 * <p>
	 * Return the value of the <code>styleClass</code> property.
	 * </p>
	 * <p>
	 * Contents: Space-separated list of CSS style class(es) to be applied when
	 * this element is rendered. This value must be passed through as the
	 * "class" attribute on generated markup.
	 */
	public java.lang.String getStyleClass() {
		if (null != this.styleClass) {
			return this.styleClass;
		}
		ValueExpression _ve = getValueExpression("styleClass");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>styleClass</code> property.
	 * </p>
	 */
	public void setStyleClass(java.lang.String styleClass) {
		this.styleClass = styleClass;
	}

	private java.lang.String tabindex;

	/**
	 * <p>
	 * Return the value of the <code>tabindex</code> property.
	 * </p>
	 * <p>
	 * Contents: Position of this element in the tabbing order for the current
	 * document. This value must be an integer between 0 and 32767.
	 */
	public java.lang.String getTabindex() {
		if (null != this.tabindex) {
			return this.tabindex;
		}
		ValueExpression _ve = getValueExpression("tabindex");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>tabindex</code> property.
	 * </p>
	 */
	public void setTabindex(java.lang.String tabindex) {
		this.tabindex = tabindex;
		handleAttribute("tabindex", tabindex);
	}

	private java.lang.String title;

	/**
	 * <p>
	 * Return the value of the <code>title</code> property.
	 * </p>
	 * <p>
	 * Contents: Advisory title information about markup elements generated for
	 * this component.
	 */
	public java.lang.String getTitle() {
		if (null != this.title) {
			return this.title;
		}
		ValueExpression _ve = getValueExpression("title");
		if (_ve != null) {
			return (java.lang.String) _ve.getValue(getFacesContext().getELContext());
		} else {
			return null;
		}
	}

	/**
	 * <p>
	 * Set the value of the <code>title</code> property.
	 * </p>
	 */
	public void setTitle(java.lang.String title) {
		this.title = title;
		handleAttribute("title", title);
	}

	private Object[] _values;

	public Object saveState(FacesContext _context) {
		if (_values == null) {
			_values = new Object[29];
		}
		_values[0] = super.saveState(_context);
		_values[1] = accesskey;
		_values[2] = alt;
		_values[3] = autocomplete;
		_values[4] = dir;
		_values[5] = disabled;
		_values[6] = label;
		_values[7] = lang;
		_values[8] = maxlength;
		_values[9] = onblur;
		_values[10] = onchange;
		_values[11] = onclick;
		_values[12] = ondblclick;
		_values[13] = onfocus;
		_values[14] = onkeydown;
		_values[15] = onkeypress;
		_values[16] = onkeyup;
		_values[17] = onmousedown;
		_values[18] = onmousemove;
		_values[19] = onmouseout;
		_values[20] = onmouseover;
		_values[21] = onmouseup;
		_values[22] = onselect;
		_values[23] = readonly;
		_values[24] = size;
		_values[25] = style;
		_values[26] = styleClass;
		_values[27] = tabindex;
		_values[28] = title;
		return _values;
	}

	public void restoreState(FacesContext _context, Object _state) {
		_values = (Object[]) _state;
		super.restoreState(_context, _values[0]);
		this.accesskey = (java.lang.String) _values[1];
		this.alt = (java.lang.String) _values[2];
		this.autocomplete = (java.lang.String) _values[3];
		this.dir = (java.lang.String) _values[4];
		this.disabled = (java.lang.Boolean) _values[5];
		this.label = (java.lang.String) _values[6];
		this.lang = (java.lang.String) _values[7];
		this.maxlength = (java.lang.Integer) _values[8];
		this.onblur = (java.lang.String) _values[9];
		this.onchange = (java.lang.String) _values[10];
		this.onclick = (java.lang.String) _values[11];
		this.ondblclick = (java.lang.String) _values[12];
		this.onfocus = (java.lang.String) _values[13];
		this.onkeydown = (java.lang.String) _values[14];
		this.onkeypress = (java.lang.String) _values[15];
		this.onkeyup = (java.lang.String) _values[16];
		this.onmousedown = (java.lang.String) _values[17];
		this.onmousemove = (java.lang.String) _values[18];
		this.onmouseout = (java.lang.String) _values[19];
		this.onmouseover = (java.lang.String) _values[20];
		this.onmouseup = (java.lang.String) _values[21];
		this.onselect = (java.lang.String) _values[22];
		this.readonly = (java.lang.Boolean) _values[23];
		this.size = (java.lang.Integer) _values[24];
		this.style = (java.lang.String) _values[25];
		this.styleClass = (java.lang.String) _values[26];
		this.tabindex = (java.lang.String) _values[27];
		this.title = (java.lang.String) _values[28];
	}

	@SuppressWarnings("unchecked")
	private void handleAttribute(String name, Object value) {

		List<String> setAttributes = null;
		String pkg = this.getClass().getPackage().getName();
		if (Arrays.binarySearch(OPTIMIZED_PACKAGES, pkg) >= 0) {
			setAttributes = (List<String>) this.getAttributes().get(
					"br.srv.full.postalservices.faces.components.LocaleUIComponent.attributesThatAreSet");
			if (setAttributes == null) {
				setAttributes = new ArrayList<String>(6);
				this.getAttributes().put(
						"br.srv.full.postalservices.faces.components.LocaleUIComponent.attributesThatAreSet",
						setAttributes);
			}
			if (value == null) {
				setAttributes.remove(name);
			} else if (!setAttributes.contains(name)) {
				setAttributes.add(name);
			}
		}
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see javax.faces.component.UIInput#setValue(java.lang.Object)
	 */
	@Override
	public void setValue(Object p_value) {
		// TODO Auto-generated method stub
		super.setValue(p_value);
	}
}
